permutace

Otázka od: pavel.sl@centrum.cz

3. 9. 2002 20:45

Zdravim,
 nevite nekdo, jak by se delal program na vypsani vsech permutaci
x cisel
(jedna se mi o 9 cisel, takze bych delal nerad 9 vnorenych for
cyklu)

Diky za jakoukoliv radu
 Pavel

--------------------
Nový vyhledávač pro český internet www.WebFast.cz - prostě najde ...


Odpovedá: Erik Salaj

5. 9. 2002 0:34

> nevite nekdo, jak by se delal program na vypsani vsech permutaci
> x cisel
> (jedna se mi o 9 cisel, takze bych delal nerad 9 vnorenych for
> cyklu)

rekurziou, n je pocet prvkov:

------------------------------------------

program Permut;
{$APPTYPE CONSOLE}

const n = 9;

var p: array [1..n] of Integer;

procedure Vymen(var x, y: Integer);
var temp: Integer;
begin
  temp := x; x := y; y := temp;
end;

procedure Vypis;
var i: Integer;
begin
  for i := 1 to n do
    Write(p[i], ' ');
  WriteLn;
end;

procedure Permutacie(od: Integer);
var i: Integer;
begin
  if od = n then
    Vypis
  else
    for i := od to n do
    begin
      Vymen(p[od], p[i]);
      Permutacie(od + 1);
      Vymen(p[od], p[i]);
    end;
end;

procedure Init;
var i: Integer;
begin
  for i := 1 to n do
    p[i] := i;
end;

begin
  Init;
  Permutacie(1);
  ReadLn;
end.

------------------------------------------

Erik

Odpovedá: Pavel Mattivi

4. 9. 2002 10:33

snad obecne napsanou rekurzivni funkci ?

Pavel Mattivi
Dezadata spol. s r.o.
Mostní 102
757 01, Valašské Meziříčí
tel.: 0651/618 939, tel./fax: 0651/618 933
mobil: 0608 743 824
pmattivi@dezadata.cz

----- Original Message -----
From: <pavel.sl@centrum.cz>
To: <delphi-l@clexpert.cz>
Sent: Tuesday, September 03, 2002 8:37 PM
Subject: permutace


> Zdravim,
> nevite nekdo, jak by se delal program na vypsani vsech permutaci
> x cisel
> (jedna se mi o 9 cisel, takze bych delal nerad 9 vnorenych for
> cyklu)
>
> Diky za jakoukoliv radu
> Pavel
>
> --------------------
> Nový vyhledávač pro český internet www.WebFast.cz - prostě najde ...
>
>
>

Odpovedá: Roman Toda

4. 9. 2002 16:04

Vidim ze ti nikto neodpoveda, tak skusim z hlavy ja. Permutacie generuj v
poli rekurzivne vymenami prvkov. Urcite si to budes vediet upravit a
vyskusat

var
  a:array[1..MAX_PERM] of integer;

procedure perm(i:integer);
var j,k:integer;
begin
  if i=n then begin
    // pole je hotove
    SpracujPermutaciu;
  end else
    for j:=i to n do begin
      vymen (i,j);
      perm(i+1);
      vymen(i,j);
    end;
end

begin
  for i:=1 to PermutacieCoho do a[i]:=i;
  perm(1);
end;


Roman

> -----Original Message-----
> From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz]On
> Behalf Of pavel.sl@centrum.cz
> Sent: Tuesday, September 03, 2002 8:38 PM
> To: delphi-l@clexpert.cz
> Subject: permutace
>
>
> Zdravim,
> nevite nekdo, jak by se delal program na vypsani vsech permutaci
> x cisel
> (jedna se mi o 9 cisel, takze bych delal nerad 9 vnorenych for
> cyklu)
>
> Diky za jakoukoliv radu
> Pavel
>
> --------------------
> Nový vyhledávač pro český internet www.WebFast.cz - prostě najde ...
>
>
>
>
>

Odpovedá: Käss, Pavel

4. 9. 2002 10:37

http://www.cut-the-knot.com/do_you_know/AllPerm.shtml

> -----Original Message-----
> nevite nekdo, jak by se delal program na vypsani vsech permutaci
> x cisel
> (jedna se mi o 9 cisel, takze bych delal nerad 9 vnorenych for
> cyklu)
>

Odpovedá: Erik Salaj

4. 9. 2002 23:12

> http://www.cut-the-knot.com/do_you_know/AllPerm.shtml

znacne neprehladny algoritmus a k tomu este zhruba 4-krat
pomalsi ako ten klasicky jednoduchy rekurzivny algoritmus

Erik